package com.wuad.platformwuad.util;

import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式工具类
 */
@Component
public class ZhengzeUtils {

    /**
     * 验证手机号
     *
     * @param str
     * @return
     */
    public static boolean isMobile(final String str) {
        Pattern p = Pattern.compile("^((13[0-9])|(14[0,1,4-9])|(15[0-3,5-9])|(16[2,5,6,7])|(17[0-8])|(18[0-9])|(19[0-3,5-9]))\\d{8}$");
        Matcher m = p.matcher(str);
        boolean b = m.matches();
        return b;
    }

    /**
     * 验证固定电话
     *
     * @param str
     * @return
     */
    public static boolean isPhone(final String str) {
        Pattern p1 = null, p2 = null;
        Matcher m = null;
        boolean b = false;
        p1 = Pattern.compile("^[0][1-9]{2,3}-[0-9]{5,10}$");
        p2 = Pattern.compile("^[1-9]{1}[0-9]{5,8}$");
        if (str.length() > 9) {
            m = p1.matcher(str);
            b = m.matches();
        } else {
            m = p2.matcher(str);
            b = m.matches();
        }
        return b;
    }

    /**
     * 验证固话和手机
     *
     * @param str
     * @return
     */
    public static boolean isContactPhone(String str) {
        // 该正则表达式可以匹配所有的数字 包括负数
        // 手机
        Pattern pattern = Pattern.compile("^[1]([378][0-9]|4[5-9]|5[0-35-9]|6[2567]|9[13589])[0-9]{8}$");
        // 座机
        Pattern pattern1 = Pattern.compile("^0(10|2[0-9]|[3-9][0-9]{2})[1-9]{6,7}$");
        String bigStr;
        try {
            bigStr = new BigDecimal(str).toString();
        } catch (Exception e) {
            // 异常 说明包含非数字。
            return false;
        }
        // matcher是全匹配
        Matcher isNum = pattern.matcher(bigStr);
        if (!isNum.matches()) {
            return false;
        }
        return true;
    }

    /**
     * 验证日期时间格式
     * yyyy-MM-dd HH:mm:dd
     * 每一项数据的合法性
     *
     * @param str
     * @return
     */
    public static boolean isDateTime(final String str) {
        Pattern p = Pattern.compile("^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$");
        Matcher m = p.matcher(str);
        boolean b = m.matches();
        return b;
    }

    /**
     * 验证日期格式
     * yyyy-MM-dd
     * 每一项数据的合法性
     *
     * @param str
     * @return
     */
    public static boolean isDate(final String str) {
        Pattern p = Pattern.compile("^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))$");
        Matcher m = p.matcher(str);
        boolean b = m.matches();
        return b;
    }

    /**
     * 验证数字
     * @param str
     * @return
     */
    public static boolean isNumeric(String str){
//        Pattern pattern = Pattern.compile("[0-9]*");
        Pattern pattern = Pattern.compile("/d{3}/d{8}|/d{4}/{7,8}");
        Matcher isNum = pattern.matcher(str);
        if( !isNum.matches() ){
            return false;
        }
        return true;
    }

    /**
     * 验证手机号
     *
     * @param str
     * @return
     */
    public static boolean isMobile1(final String str) {
        Pattern p = Pattern.compile("^((13[0-9])|(14[0,1,4-9])|(15[0-3,5-9])|(16[2,5,6,7])|(17[0-8])|(18[0-9])|(19[0-3,5-9]))\\d{8}$");
        Matcher m = p.matcher(str);
        boolean b = m.matches();
        return b;
    }
}
